package clases.academico;

import CapaDatos.DataSource;
import CapaDatos.Sql;
import global.Dialogos;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;


public class Matricula extends Familiar {

    private int idmatricula;
    private int numero;
    private String tipo;
    private Boolean estado;
    private String sql;
    private DataSource dt;
    public PeriodoCurso curso;

    public Matricula() {
        dt = new DataSource();
        curso = new PeriodoCurso();

    }

    public int getIdmatricula() {
        return idmatricula;
    }

    public void setIdmatricula(int idmatricula) {
        this.idmatricula = idmatricula;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public Boolean getEstado() {
        return estado;
    }

    public void setEstado(Boolean estado) {
        this.estado = estado;
    }

    public int numeromatricula() {
        return Sql.getMax("NUMEROMATRICULA", "MATRICULA", true);
    }

    public boolean guardarMatricula() {
        this.idmatricula = Sql.getMax("IDMATRICULA", "MATRICULA", true);
        sql = "INSERT INTO MATRICULA VALUES (" + this.idmatricula + ", "
                + "'" + this.getCedulaRuc() + "', " + this.numeromatricula() + ", "
                + "'" + this.tipo + "', " + true + ")";
        return Sql.insertar(sql);
    }

    public boolean guardarMatriculaCurso() {
        if (Sql.insertar("INSERT INTO MATRICULACURSO VALUES (" + Sql.getMax("IDMATRICULACURSO", "MATRICULACURSO", true) + " ,"
                + "" + this.idmatricula + ", "
                + "" + curso.getIdcursoperiodo() + ", " + true + ")") == true) {

            return true;
        } else {
            Dialogos.Error("Error al matricular el alumno");
            return false;
        }

    }

    public boolean ExistenciaMatricula(String alumno) {
        sql = "SELECT * FROM MATRICULA \n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA \n"
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO='NORMAL' "
                + "AND CONCAT(APELLIDO,' ',NOMBRE)='" + alumno + "'";

        return Sql.isExiste(sql) == true;
    }

    public void AnularMatricula(String cedula) {
        sql = "UPDATE MATRICULA SET ESTADO=FALSE WHERE CEDULARUC='" + cedula + "'";
        if (Sql.actualizar(sql) == true) {
            global.Mensajes.mostrarMensaje("Correcto!", "Matricula anulada correctamente...", 1);
        } else {
            Dialogos.Error("Error al anular la  matricula");
        }
    }

    public boolean ExistenciaMatricula(String alumno, String curso) {
        sql = "SELECT * FROM MATRICULA \n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA \n"
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "WHERE PERIODO.ESTADO=TRUE AND CONCAT(APELLIDO,' ',NOMBRE)='" + alumno + "'\n"
                + "AND CONCAT(CURSO,' ',PARALELO)='" + curso + "'";

        return Sql.isExiste(sql) == true;
    }

    public boolean eliminarMatricula(String curso, String alumno) {
        sql = "DELETE FROM MATRICULACURSO WHERE IDPERIODOCURSO IN \n"
                + "(SELECT IDPERIODOCURSO FROM PERIODOCURSO \n"
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO \n"
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "WHERE PERIODO.ESTADO=TRUE AND CONCAT(CURSO,' ',PARALELO)='" + curso + "')\n"
                + "AND IDMATRICULA IN (SELECT IDMATRICULA FROM MATRICULA \n"
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "WHERE CONCAT(APELLIDO,' ',NOMBRE)='" + alumno + "')";

        return Sql.eliminar(sql);

    }

    public boolean actualizarMatricula() {
        sql = "UPDATE MATRICULA SET TIPO='" + this.tipo + "' "
                + "WHERE IDMATRICULA=" + this.idmatricula + "";

        return Sql.actualizar(sql);
    }

    public boolean actualizarMatriculaCurso() {
        if (Sql.actualizar("UPDATE MATRICULACURSO SET IDPERIODOCURSO='" + this.curso.getIdcursoperiodo() + "' "
                + "WHERE IDMATRICULA=" + this.idmatricula + "") == true) {
            global.Mensajes.mostrarMensaje("Correcto!", "Datos actualizados correctamente...!", 1);
            return true;
        } else {
            Dialogos.Error("Error al actualizar");
            return false;
        }
    }

    public void llenardatosMatricula() {
        sql = "SELECT MATRICULACURSO.IDMATRICULA, MATRICULACURSO.IDPERIODOCURSO, "
                + "NUMEROMATRICULA, CURSO, PARALELO, MATRICULA.TIPO, "
                + "MATRICULA.CEDULARUC, NOMBRE, APELLIDO, DIRECCION FROM MATRICULACURSO "
                + "JOIN MATRICULA ON MATRICULA.IDMATRICULA=MATRICULACURSO.IDMATRICULA "
                + "JOIN ALUMNO ON ALUMNO.CEDULARUC=MATRICULA.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATRICULACURSO.IDPERIODOCURSO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "WHERE MATRICULA.CEDULARUC='" + this.getCedulaRuc() + "'";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idmatricula = dt.getInt(1);
            this.curso.setIdcursoperiodo(dt.getInt(2));
            this.numero = dt.getInt(3);
            this.curso.setCurso(dt.getString(4));
            this.curso.setParalelo(dt.getString(5));
            this.tipo = dt.getString(6);
            this.setNombre(dt.getString(9));
            this.setApellido(dt.getString(10));
            this.setDireccion(dt.getString(11));
        }
    }

    public void listaAlumnoCurso(JList lista, DefaultListModel modelo, String Curso, String cursoespecial) {
        sql = "SELECT CONCAT(APELLIDO,' ',NOMBRE) FROM MATRICULA \n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA \n"
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "WHERE PERIODO.ESTADO=TRUE \n"
                + "AND CONCAT(CURSO,' ',PARALELO)='" + Curso + "' AND MATRICULA.IDMATRICULA NOT IN \n"
                + "(SELECT IDMATRICULA FROM MATRICULACURSO \n"
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "WHERE TIPO!='NORMAL' AND PERIODO.ESTADO=TRUE AND CONCAT(CURSO,' ',PARALELO)='" + cursoespecial + "')\n"
                + "AND MATRICULA.ESTADO=TRUE ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            modelo.addElement(dt.getString(1));
            lista.setModel(modelo);
        }
        lista.setSelectedIndex(0);
    }

    public void listaAlumnoCursoEspeciales(JList lista, DefaultListModel modelo, String CursoEspecial) {
        sql = "SELECT CONCAT(APELLIDO,' ',NOMBRE) FROM MATRICULA \n"
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA \n"
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "WHERE PERIODO.ESTADO=TRUE \n"
                + "AND CONCAT(CURSO,' ',PARALELO)='" + CursoEspecial + "' "
                + "AND MATRICULA.ESTADO=TRUE ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            modelo.addElement(dt.getString(1));
            lista.setModel(modelo);
        }
        lista.setSelectedIndex(0);
    }

    public void sacarIdMatricula(String alumno) {
        sql = "SELECT MATRICULA.IDMATRICULA FROM MATRICULA "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "WHERE EXISTS (SELECT IDPERIODOCURSO FROM PERIODOCURSO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON CURSO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "WHERE MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "AND PERIODO.ESTADO=TRUE) "
                + "AND CONCAT(APELLIDO,' ',NOMBRE)='" + alumno + "'";

        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idmatricula = dt.getInt(1);

        }
    }

    public String SqlGeneralMatricula() {

        sql = "SELECT NUMEROMATRICULA, ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "CONCAT(CURSO,' ',PARALELO), MATRICULA.TIPO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO='NORMAL' "
                + "AND MATRICULA.ESTADO=TRUE ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public String SqlAlumnoMatricula(String alumno) {
        sql = "SELECT NUMEROMATRICULA, ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "CONCAT(CURSO,' ',PARALELO), MATRICULA.TIPO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO='NORMAL' "
                + "AND CONCAT(APELLIDO,' ',NOMBRE) LIKE ('" + alumno + "%') "
                + "AND MATRICULA.ESTADO=TRUE ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public String SqlApellidoMatricula(String apellido) {
        sql = "SELECT NUMEROMATRICULA, ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "CONCAT(CURSO,' ',PARALELO), MATRICULA.TIPO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO='NORMAL' "
                + "AND APELLIDO LIKE ('" + apellido + "%') "
                + "AND MATRICULA.ESTADO=TRUE ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public String SqlNombreMatricula(String nombre) {
        sql = "SELECT NUMEROMATRICULA, ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "CONCAT(CURSO,' ',PARALELO), MATRICULA.TIPO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO='NORMAL' "
                + "AND NOMBRE LIKE ('" + nombre + "%') "
                + "AND MATRICULA.ESTADO=TRUE ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public String SqlCedulaMatricula(String cedula) {
        sql = "SELECT NUMEROMATRICULA, ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "CONCAT(CURSO,' ',PARALELO), MATRICULA.TIPO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO='NORMAL' "
                + "AND ALUMNO.CEDULARUC LIKE ('" + cedula + "%') "
                + "AND MATRICULA.ESTADO=TRUE ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public String SqlCursoMatricula(String curso) {
        sql = "SELECT NUMEROMATRICULA, ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "CONCAT(CURSO,' ',PARALELO), MATRICULA.TIPO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO='NORMAL' "
                + "AND CONCAT(CURSO,' ',PARALELO)='" + curso + "' "
                + "AND MATRICULA.ESTADO=TRUE ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public String SqlTipoMatricula(String tipo) {
        sql = "SELECT NUMEROMATRICULA, ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE), "
                + "CONCAT(CURSO,' ',PARALELO), MATRICULA.TIPO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO='NORMAL' "
                + "AND MATRICULA.TIPO='" + tipo + "' "
                + "AND MATRICULA.ESTADO=TRUE ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public void ConsultaMatricula(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("Nº");
        modelo.addColumn("MATRICULA");
        modelo.addColumn("CEDULA");
        modelo.addColumn("ALUMNO");
        modelo.addColumn("CURSO");
        modelo.addColumn("TIPO MATRICULA");
        DefaultTableCellRenderer N = new DefaultTableCellRenderer();
        N.setHorizontalAlignment(SwingConstants.CENTER);
        tabla.getColumnModel().getColumn(0).setCellRenderer(N);
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(20);
        columna = tabla.getColumnModel().getColumn(1);
        columna.setPreferredWidth(40);
        columna = tabla.getColumnModel().getColumn(2);
        columna.setPreferredWidth(80);
        columna = tabla.getColumnModel().getColumn(3);
        columna.setPreferredWidth(350);
        columna = tabla.getColumnModel().getColumn(4);
        columna.setPreferredWidth(350);
        columna = tabla.getColumnModel().getColumn(5);
        columna.setPreferredWidth(100);
        sql = objPaginacion.getPaginacion(sql, pagina, 50);
        Sql.getConsulta(sql, dt);

        String[] fila;
        int n = (pagina * 50) - 49;
        while (dt.next()) {
            fila = new String[6];
            fila[0] = Integer.toString(n);
            fila[1] = dt.getString(1);
            fila[2] = dt.getString(2);
            fila[3] = dt.getString(3);
            fila[4] = dt.getString(4);
            fila[5] = dt.getString(5);
            modelo.addRow(fila);
            n++;
        }

        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public void BuscarMatricula(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("Nº");
        modelo.addColumn("MATRICULA");
        modelo.addColumn("CEDULA");
        modelo.addColumn("ALUMNO");
        modelo.addColumn("CURSO");

        DefaultTableCellRenderer centrar = new DefaultTableCellRenderer();
        centrar.setHorizontalAlignment(SwingConstants.CENTER);
        tabla.getColumnModel().getColumn(0).setCellRenderer(centrar);
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(10);
        columna = tabla.getColumnModel().getColumn(1);
        columna.setPreferredWidth(60);
        columna = tabla.getColumnModel().getColumn(2);
        columna.setPreferredWidth(70);
        columna = tabla.getColumnModel().getColumn(3);
        columna.setPreferredWidth(250);
        columna = tabla.getColumnModel().getColumn(4);
        columna.setPreferredWidth(200);
        sql = objPaginacion.getPaginacion(sql, pagina, 25);
        Sql.getConsulta(sql, dt);
        String[] fila;
        int n = (pagina * 25) - 24;
        while (dt.next()) {
            fila = new String[6];
            fila[0] = Integer.toString(n);
            fila[1] = dt.getString(1);
            fila[2] = dt.getString(2);
            fila[3] = dt.getString(3);
            fila[4] = dt.getString(4);
            modelo.addRow(fila);
            n++;
        }
        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public String SqlGeneralMatriculaEspecial() {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE) "
                + "AS ALUMNO, CONCAT(CURSO,' ',PARALELO) AS CURSO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO!='NORMAL' AND MATRICULA.ESTADO=TRUE "
                + "ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public String SqlCursoMatriculaEspecial(String curso) {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE) "
                + "AS ALUMNO, CONCAT(CURSO,' ',PARALELO) AS CURSO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO!='NORMAL' AND MATRICULA.ESTADO=TRUE "
                + "AND CONCAT(CURSO,' ',PARALELO)='" + curso + "' "
                + "ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public String SqlAlumnoMatriculaEspecial(String alumno) {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE) "
                + "AS ALUMNO, CONCAT(CURSO,' ',PARALELO) AS CURSO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO!='NORMAL' AND MATRICULA.ESTADO=TRUE "
                + "AND CONCAT(APELLIDO,' ',NOMBRE) LIKE ('" + alumno + "%') "
                + "ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public String SqlCedulaMatriculaEspecial(String cedula) {
        sql = "SELECT ALUMNO.CEDULARUC, CONCAT(APELLIDO,' ',NOMBRE) "
                + "AS ALUMNO, CONCAT(CURSO,' ',PARALELO) AS CURSO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO!='NORMAL' AND MATRICULA.ESTADO=TRUE "
                + "AND ALUMNO.CEDULARUC LIKE ('" + cedula + "%') "
                + "ORDER BY (CONCAT(APELLIDO,' ',NOMBRE)) ";

        return sql;
    }

    public void ConsultaMatriculaEspecial(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("Nº");
        modelo.addColumn("CEDULA");
        modelo.addColumn("ALUMNO");
        modelo.addColumn("CURSO ESPECIAL");
        DefaultTableCellRenderer centrar = new DefaultTableCellRenderer();
        centrar.setHorizontalAlignment(SwingConstants.CENTER);
        tabla.getColumnModel().getColumn(0).setCellRenderer(centrar);
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(20);
        columna = tabla.getColumnModel().getColumn(1);
        columna.setPreferredWidth(100);
        columna = tabla.getColumnModel().getColumn(2);
        columna.setPreferredWidth(400);
        columna = tabla.getColumnModel().getColumn(3);
        columna.setPreferredWidth(500);
        sql = objPaginacion.getPaginacion(sql, pagina, 50);
        Sql.getConsulta(sql, dt);

        String[] fila;
        int n = (pagina * 50) - 49;
        while (dt.next()) {
            fila = new String[4];
            fila[0] = Integer.toString(n);
            fila[1] = dt.getString(1);
            fila[2] = dt.getString(2);
            fila[3] = dt.getString(3);
            modelo.addRow(fila);
            n++;
        }

        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public void SacarCursoAlumno(JComboBox cbo, String alumno) {

        sql = "SELECT CONCAT(CURSO,' ',PARALELO) AS CURSO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO='NORMAL' "
                + "AND CONCAT(APELLIDO,' ',NOMBRE) = '" + alumno + "' ";

        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            cbo.setSelectedItem(dt.getString(1));
        }

    }

    public String SacarCursoAlumno(String alumno) {
        String cursos = "";
        sql = "SELECT CONCAT(CURSO,' ',PARALELO) AS CURSO FROM MATRICULA "
                + "JOIN MATRICULACURSO ON MATRICULACURSO.IDMATRICULA=MATRICULA.IDMATRICULA "
                + "JOIN PERIODOCURSO ON MATRICULACURSO.IDPERIODOCURSO=PERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC "
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC "
                + "WHERE PERIODO.ESTADO=TRUE AND CURSO.TIPO='NORMAL' "
                + "AND CONCAT(APELLIDO,' ',NOMBRE) = '" + alumno + "' ";

        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            cursos = dt.getString(1);
        }

        return cursos;

    }

    public boolean QuitarAsignacion(String curso, String alumno) {
        if (Sql.isExiste("SELECT IDMATRICULACURSO FROM LIBRETA WHERE IDMATRICULACURSO IN \n"
                + "(SELECT IDMATRICULACURSO FROM MATRICULACURSO WHERE IDPERIODOCURSO IN \n"
                + "(SELECT IDPERIODOCURSO FROM PERIODOCURSO \n"
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO \n"
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "WHERE PERIODO.ESTADO=TRUE AND CONCAT(CURSO,' ',PARALELO)='" + curso + "') \n"
                + "AND IDMATRICULA IN (SELECT IDMATRICULA FROM MATRICULA \n"
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "WHERE CONCAT(APELLIDO,' ',NOMBRE)='" + alumno + "'))") == true) {

            Dialogos.Error("El alumno " + alumno + " tiene notas parciales o quimestrales... No se puede quitar");
            return false;

        } else if (Sql.isExiste("SELECT IDMATRICULACURSO FROM LIBRETACOMPORTAMIENTO WHERE IDMATRICULACURSO IN \n"
                + "(SELECT IDMATRICULACURSO FROM MATRICULACURSO WHERE IDPERIODOCURSO IN \n"
                + "(SELECT IDPERIODOCURSO FROM PERIODOCURSO \n"
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO \n"
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "WHERE PERIODO.ESTADO=TRUE AND CONCAT(CURSO,' ',PARALELO)='" + curso + "') \n"
                + "AND IDMATRICULA IN (SELECT IDMATRICULA FROM MATRICULA \n"
                + "JOIN ALUMNO ON MATRICULA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=ALUMNO.CEDULARUC \n"
                + "WHERE CONCAT(APELLIDO,' ',NOMBRE)='" + alumno + "'))") == true) {

            Dialogos.Error("El alumno " + alumno + " tiene notas de comportamiento... No se puede quitar");
            return false;

        } else {
            return true;
        }
    }

}
